package com.tbm.console.proj.json;

import com.tbm.console.base.controller.BaseController;
import com.tbm.console.common.constant.AuthConstant;
import com.tbm.console.common.constant.InsUpdDelFlagConstant;
import com.tbm.console.common.constant.SystemUserTableColumnConstant;
import com.tbm.console.proj.entity.SystemUser;
import com.tbm.console.proj.service.SystemUserService;
import com.tbm.console.util.DateUtil;
import com.tbm.console.util.PageData;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

@RestController
@Slf4j
public class SystemUserJson extends BaseController {

    @Autowired
    private SystemUserService systemUserService;

    /**
     * 用户管理--用户列表-数据格式
     * @param start
     * @param length
     * @return
     */
    @RequestMapping("/user-list-json/{start}/{length}")
    public Map<String,Object> userListJson(@PathVariable("start") Integer start, @PathVariable("length") Integer length){
        PageData pageData = this.getPageData();
        PageData param = new PageData();
        param.put("deleteFlag", InsUpdDelFlagConstant.DELETE_FLAG_N);
        Integer roleId = 0;
        try{
            roleId = Integer.valueOf(pageData.get("key").toString());
        }catch (Exception e){

        }
        if(pageData.get("from")!=null&&!"".equals(pageData.get("from").toString())){
            param.put("minCreateTime", pageData.get("from").toString() + " 00:00:00");
        }
        if(pageData.get("to")!=null&&!"".equals(pageData.get("to").toString())){
            param.put("maxCreateTime", pageData.get("to").toString() + " 23:59:59");
        }
        if(null!=pageData.get("belongTo")&&!"".equals(pageData.getString("belongTo"))){
            param.put("belongTo", pageData.getString("belongTo"));
        }
        if(null!=pageData.get("powerLevel")&&!"".equals(pageData.getString("powerLevel"))){
            param.put("powerLevel", pageData.getString("powerLevel"));
        }
        if(0!=roleId){
            param.put("roleId",roleId);
        }
        List<SystemUser> systemUsers = systemUserService.findAll(param,start==0?0:start-1,length);
        Long count = systemUserService.count(param);
        pageData.put("total", count);
        pageData.put("rows", systemUsers);
        return pageData;
    }

   
    @RequestMapping("/user-ins-upd-del/{id}")
    public String userOperation(@PathVariable("id") String id){
        Integer idInteger = Integer.valueOf(id);
        SystemUser systemUser = systemUserService.findById(idInteger);
        PageData pd = this.getPageData();
        if(null!=pd.get("username")&&!"".equals(pd.getString("username"))){
            systemUser.setUsername(pd.getString("username"));
        }
        if(null!=pd.get("password")&&!"".equals(pd.getString("password"))){
            systemUser.setPassword(new Md5Hash(AuthConstant.DEFAULTPASSWORD, systemUser.getUsername() + AuthConstant.DEFAULTSALT).toString());
        }
        if(null!=pd.get("nickname")&&!"".equals(pd.getString("nickname"))){
            systemUser.setNickname(pd.getString("nickname"));
        }
        if(null!=pd.get("role_id")&&!"".equals(pd.getString("role_id"))){
            systemUser.setRoleId(Integer.valueOf(pd.getString("role_id")));
        }
        if(null!=pd.get("group_id")&&!"".equals(pd.getString("group_id"))){
            systemUser.setBelongTo(pd.getString("group_id"));
        }
        if(null!=pd.get("power_level")&&!"".equals(pd.getString("power_level"))){
            systemUser.setPowerLevel(pd.getString("power_level"));
        }
        if(null!=pd.get("delete_flag")&&!"".equals(pd.getString("delete_flag"))){
            systemUser.setDeleteFlag(InsUpdDelFlagConstant.DELETE_FLAG_Y);
        }
        if(null!=pd.get("locked")&&!"".equals(pd.getString("locked"))){
            systemUser.setLocked(systemUser.getLocked()?false:true);
        }
        SystemUser systemUsers = systemUserService.save(systemUser);
        return "success";

    }
    @RequestMapping("/user-check/{username}/{id}")
    public String userCheck(@PathVariable("username") String username,@PathVariable("id") String id){
       //表示编辑
        if(-1!=Integer.valueOf(id)){
            return "success";
        }
        PageData pd = new PageData();
        pd.put("username", username);
        List<SystemUser> all = systemUserService.findAll(pd);
        //表示新增

        if(0==all.size()){
            return "success";
        }
        return "error";
    }
    /**
     * flag=="i" -- 新增
     * flag=="u" -- 修改
     * flag=="d" -- 删除
     * flag=="a" -- 激活
     * @param flag
     * @return
     */
//    @RequestMapping("/user-ins-upd-del/{flag}")
//    public String userEdit(@PathVariable("flag") String flag){
//        PageData pageData = this.getPageData();
//        SystemUser systemUser = new SystemUser();
//        List<SystemUser> userList = null;
//        try{
//            String[] ids = pageData.get(SystemUserTableColumnConstant.ID).toString().split(",");
//            Integer [] idsList = new Integer[ids.length];
//            for(int i=0;i<ids.length;i++){
//                idsList[i]=(Integer.valueOf(ids[i]));
//            }
//            userList =  systemUserService.findAllById(idsList) ;
//        }catch (java.lang.NullPointerException e){
//            log.info("insert");
//        }
//
//        //删除
//        if(InsUpdDelFlagConstant.DELETE.equals(flag)){
//            systemUserService.deleteByIds(userList);
//            return "";
//        }
//        //激活
//        if(InsUpdDelFlagConstant.ACTIVE.equals(flag)){
//            List<SystemUser> activie = new ArrayList<>();
//            for(SystemUser user : userList){
//                user.setLocked(!user.getLocked());
//                user.setUpdateTime(DateUtil.getTime());
//                activie.add(user);
//            }
//            systemUserService.saveAll(activie);
//            return "";
//        }
//
//        //新增
//        if(InsUpdDelFlagConstant.INSERT.equals(flag)){
//            systemUser.setUsername(pageData.getString(SystemUserTableColumnConstant.USERNAME));
//            systemUser.setNickname(pageData.getString(SystemUserTableColumnConstant.NICKNAME));
//            systemUser.setRoleId(Integer.valueOf(pageData.get(SystemUserTableColumnConstant.ROLEID).toString()));
//            systemUser.setLocked(false);
//            systemUser.setSalt(AuthConstant.DEFAULTSALT);
//            systemUser.setCreateTime(DateUtil.getTime());
//            systemUser.setBelongTo(pageData.getString(SystemUserTableColumnConstant.BELONGTO));
//            systemUser.setPowerLevel(pageData.getString(SystemUserTableColumnConstant.POWERLEVEL));
//            systemUser.setPassword(new Md5Hash(AuthConstant.DEFAULTPASSWORD, systemUser.getUsername() + systemUser.getSalt()).toString());
//            systemUserService.saveAll(Arrays.asList(systemUser));
//            return "";
//        }
//        //修改
//        if(InsUpdDelFlagConstant.UPDATE.equals(flag)){
//            systemUser = systemUserService.findById(Integer.valueOf(pageData.get("id").toString()));
//            if(null!=pageData.getString(SystemUserTableColumnConstant.USERNAME)){
//                systemUser.setUsername(pageData.getString(SystemUserTableColumnConstant.USERNAME));
//            }
//            if(null!=pageData.getString(SystemUserTableColumnConstant.NICKNAME)){
//                systemUser.setNickname(pageData.getString(SystemUserTableColumnConstant.NICKNAME));
//            }
//            if(null!=pageData.get(SystemUserTableColumnConstant.ROLEID)){
//                systemUser.setRoleId(Integer.valueOf(pageData.get(SystemUserTableColumnConstant.ROLEID).toString()));
//            }
//            if(null!=pageData.getString(SystemUserTableColumnConstant.BELONGTO)){
//                systemUser.setBelongTo(pageData.getString(SystemUserTableColumnConstant.BELONGTO));
//            }
//            if(null!=pageData.getString(SystemUserTableColumnConstant.POWERLEVEL)){
//                systemUser.setPowerLevel(pageData.getString(SystemUserTableColumnConstant.POWERLEVEL));
//            }
//            systemUser.setUpdateTime(DateUtil.getTime());
//            systemUserService.save(systemUser);
//            return "";
//        }
//        return "";
//    }


}
